home *** CD-ROM | disk | FTP | other *** search
- /* frontend.c (c) 1999 by Volker Remuß, remuss@cs.tu-berlin.de */
-
- /* Camera includes */
-
- #include "camera.h"
- #include "debughelp.h"
- #include "cameraops.h"
-
- /* ANSI-C-Includes */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
-
-
- /* Amiga inlcudes */
-
- #include <dos.h> // needed for onbreak on Amiga
- #include <proto/dos.h>
- #include <dos/rdargs.h>
-
- #define QUIET 1
-
- LONG __oslibversion = 37;
-
- char *VersionString = "$VER: digicam 1.0 " __AMIGADATE__ " (c) Volker Remuss";
-
-
- char *Template=
- "DEVICE/A,UNIT/A/N,BPS/A/N,SAVENAME,INFO/S,DIR/S,GF=GETFRAME/K,GT=GETTHUMBNAIL/K,GU=GETAUDIO/K,GA=GETANIM/K,\
- GAT=GETANIMTHUMB/K,MP=MAKEPREVIEW/S,TP=TAKEPICTURE/S,ERASEALL/S,ERASELAST/S,ERF=ERASEFRAME/K,ERA=ERASEANIM/K,RES=RESOLUTION/N,\
- SH=SHUTTERSPEED/N,FM=FLASHMODE/N,AP=APERTURE/N,CM=COLORMODE/N,LS=LCDSHUT/N,ASH=AUTOSHUTHOST/N,ASF=AUTOSHUTFIELD/N,\
- LM=LENSMODE/N,BM=BITMAP/N,EXP=EXPMETER/N,BC=BRIGHTNESSCONTR/N,WB=WHITEBALANCE/N,LD=LCDDATEFORMAT/N,LB=LCDBRIGTHNESS/N,\
- ST=SETTIME/S,RI=READINTREG/K,RD=READDATAREG/K,SI=SETINTREG/N,V=VALUE/N,TA=TAKEACTION/N,DELAY/N";
-
- struct DigicamArgs
- {
- char *device;
- LONG *unit, *bps;
- char *filename;
- LONG info, dir;
- char *getframe, *getthumb, *getaudio, *getanim, *getanimthumb;
- LONG makepreview, takepicture, eraseall, eraselast;
- char *eraseframe, *eraseanim;
- LONG *resolution, *shutter, *flash, *aperture, *colorm, *lcdshut, *ashost, *asfield, *lensm, *bitmapm;
- LONG *expmeter, *brightc, *whitebal, *lcddatef, *lcdbright, settime;
- char *readint, *readdata;
- LONG *setint, *value, *action, *delay;
- };
-
-
- struct RDArgs *RDArgs=0;
- struct DigicamArgs Args;
-
- int oldtime;
-
-
- int myexit(int res)
- {
- closeserial();
- FreeArgs(RDArgs);
- FreeDosObject(DOS_RDARGS, RDArgs);
- exit(res);
- return(0); //dummy
- }
-
- int breakdummy(void) // needed to avoid warnings concerning onbreak
- {
- printf("\n***Break ... requested by user\n");
- closecamera();
- closeserial();
- myexit(10);
- return(0); //dummy
- }
-
- void main(char **argv, int argc)
- {
- char stringbuf[1024];
- char *tmpstr;
- unsigned char ib;
- int16 lastpack;
- int16 size;
-
- memset(&Args, 0, sizeof(Args));
-
- if (!(RDArgs=AllocDosObject(DOS_RDARGS, NULL)))
- {
- PrintFault(ERROR_NO_FREE_STORE, "DigiCam");
- exit(10);
- }
-
- if (!(ReadArgs(Template,(LONG *)&Args,RDArgs)))
- {
- PrintFault(IoErr(), "DigiCam");
- FreeDosObject(DOS_RDARGS, RDArgs);
- exit(10);
- }
-
- onbreak(&breakdummy); // ctrl-c handling in SAS/C
-
- initserial(Args.device, *(Args.unit)); // never returns when error occured
- if (-1 == initcamera(19200, *(Args.bps), !QUIET)) myexit(10);
-
- if ((Args.filename))
- {
- printf("Basefilename is: %s\n", Args.filename);
- }
-
- chkabort();
-
- /* put - all known registers */
- if (Args.resolution) putint32reg(RESOLUTION, *(Args.resolution));
- if (Args.shutter) putint32reg(SHUTTER_SPEED, *(Args.shutter));
- if (Args.flash) putint32reg(FLASH_MODE, *(Args.flash));
- if (Args.aperture) putint32reg(APERTURE, *(Args.aperture));
- if (Args.colorm) putint32reg(COLOR_MODE, *(Args.colorm));
- if (Args.lcdshut) putint32reg(LCD_AUTOSHUT, *(Args.lcdshut));
- if (Args.ashost) putint32reg(AUTOSHUT_ON_HOST, *(Args.ashost));
- if (Args.asfield) putint32reg(AUTOSHUT_IN_FIELD, *(Args.asfield));
- if (Args.lensm) putint32reg(LENS_MODE, *(Args.lensm));
- if (Args.bitmapm) putint32reg(BITMAP, *(Args.bitmapm));
- if (Args.expmeter) putint32reg(EXP_METER, *(Args.expmeter));
- if (Args.brightc) putint32reg(BRIGHTNESS_CONTRAST, *(Args.brightc));
- if (Args.whitebal) putint32reg(WHITE_BALANCE, *(Args.whitebal));
- if (Args.lcddatef) putint32reg(LCD_DATE, *(Args.lcddatef));
- if (Args.lcdbright) putint32reg(LCD_BRIGHTNESS, *(Args.lcdbright));
- if (Args.settime)
- {
- oldtime = time(0);
- putint32reg(CLOCK, (int)mktime(gmtime((time_t *)&oldtime))-12*60*60);
- }
-
- /* Process Actions */
-
- if (Args.setint)
- {
- if (!(Args.value))
- {
- printf("To set a register a value is needed.\n");
- myexit(10);
- }
- if (-1 == putint32reg((unsigned char)(*Args.setint), *(Args.value)))
- printf("Set failed\n");
- }
-
- if (Args.readint)
- {
- if (tmpstr=strstr(Args.readint, "-")) // range ?
- {
- tmpstr[0] = 0;
- for (ib=atoi(Args.readint); ib <= atoi(tmpstr+1); ib++)
- {
- printf("int32-register %d : ", ib);
- fflush(stdout);
- printf("%d\n", getint32reg(ib));
- closecamera();
- delay(10);
- if (-1 == initcamera(19200, *(Args.bps), QUIET)) myexit(10);
-
- }
- }
- else // single register
- {
- printf("int32-register %s : ", Args.readint);
- fflush(stdout);
- printf("%d\n", getint32reg((unsigned char)atoi(Args.readint)));
- }
- }
-
- if (Args.readdata)
- {
- if (tmpstr=strstr(Args.readdata, "-")) // range ?
- {
- tmpstr[0] = 0;
- for (ib=atoi(Args.readdata); ib <= atoi(tmpstr+1); ib++)
- {
- printf("vdata-register %d : ", ib);
- fflush(stdout);
- initgetvdatareg(ib);
- lastpack = 0;
- while (!(lastpack))
- {
- if ((-1 == getdatapacket(buf, &size, &lastpack, 0))
- || (size == 0))
- {
- printf("vdata?-register %d failed\n", ib);
- lastpack = 1;
- }
- else
- {
- printf("\n");
- hexdump(buf, size);
- }
- }
- }
- }
- else
- {
- printf("\nContents of register : \n");
- initgetvdatareg((unsigned char)atoi(Args.readdata));
- lastpack = 0;
- while (!(lastpack))
- {
- if ((-1 == getdatapacket(buf, &size, &lastpack, 0))
- || (size == 0))
- {
- printf("Reading register vdata %d failed\n", (unsigned char)atoi(Args.readdata));
- lastpack = 1;
- }
- else
- {
- hexdump(buf, size);
- }
- }
- }
- }
-
- if (Args.action)
- {
- if (!(Args.value))
- {
- printf("Since there is no argument (value) for takeaction it defaults to 0\n");
- takeaction(*(Args.action), 0);
- }
- else
- takeaction(*(Args.action), *(Args.value));
- }
-
-
- /* Printout information about camera */
- if (Args.info) camerainfo();
-
- /* Erase frames */
- if (Args.eraseall)
- {
- if (-1 == takeaction(ERASE_ALL, 0))
- {
- printf("Erase all failed\n");
- myexit(10);
- }
- }
-
- if (Args.eraselast)
- {
- if (-1 == takeaction(ERASE_LAST, 0))
- {
- printf("Erase last failed\n");
- myexit(10);
- }
- }
-
- if (Args.eraseframe)
- {
- if (-1 == eraserange(Args.eraseframe, PICT))
- {
- printf("Erase frame(s) failed\n");
- myexit(10);
- }
- }
-
- if (Args.eraseanim)
- {
- if (-1 == eraserange(Args.eraseanim, ANIM))
- {
- printf("Erase anim(s) failed\n");
- myexit(10);
- }
- }
-
- /* Get Preview (Live-Picture) and save to file */
- if (Args.makepreview)
- {
- if (!(Args.filename))
- {
- printf("Filename needed!\n");
- closecamera();
- myexit(10);
- }
- printf("Taking preview\n");
- sprintf(stringbuf, "%s_p.jpg", Args.filename);
- if (-1 == takeaction(TAKE_PREVIEW, 0)) myexit(10);
- if (-1 == saveframe(0, stringbuf, PICT))
- {
- printf("Error retreiving frame\n");
- myexit(10);
- }
- }
-
-
- /* Take Picture including LED-Action accompanied shutter release delay */
- if (Args.takepicture)
- {
- if (Args.delay) // delayed shutter release
- {
- if (*(Args.delay) > 2)
- {
- for (oldtime=(int)time(0); (int)time(0) < oldtime+*(Args.delay)-2;)
- {
- putint32reg(LED, 1); // LED on resend at every loop to keep the camera alive
- delay(20);
- chkabort();
- }
- }
- putint32reg(LED, 2); // LED blink
- delay(100);
- }
- if (-1 == takeaction(TAKE_PICTURE, 0))
- {
- putint32reg(LED, 0);
- myexit(10);
- }
- putint32reg(LED, 0);
- }
-
-
- /* Save frames, All, Range (xx-yy) or single */
- if (Args.getframe)
- {
- if (-1 == saveframerange(Args.getframe, PICT, Args.filename, stringbuf))
- {
- printf("Saving picture(s) failed\n");
- closecamera();
- myexit(10);
- }
- }
-
- if (Args.getthumb)
- {
- if (-1 == saveframerange(Args.getthumb, THUMB, Args.filename, stringbuf))
- {
- printf("Saving thumbnail(s) failed\n");
- closecamera();
- myexit(10);
- }
- }
-
- if (Args.getanim)
- {
- if (-1 == saveanimrange(Args.getanim, ANIM, Args.filename, stringbuf))
- {
- printf("Saving anim(s) failed\n");
- closecamera();
- myexit(10);
- }
- }
-
- if (Args.getanimthumb)
- {
- if (-1 == saveanimrange(Args.getanimthumb, THUMB, Args.filename, stringbuf))
- {
- printf("Saving animthumb(s) failed\n");
- closecamera();
- myexit(10);
- }
- }
-
- if (Args.getaudio)
- {
- if (-1 == savewavs(Args.getaudio, Args.filename, stringbuf))
- {
- printf("Saving wave(s) failed\n");
- closecamera();
- myexit(10);
- }
- }
-
-
- if (Args.dir) dircamera();
-
- closecamera();
- delay(50);
- myexit(0);
-
- }
-